import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 1.配置函数axios
// 1.1，创建新的axios实例，配置基准路径
// 1.2，配置请求拦截器，添加上token
// 1.3，配置响应拦截器，解构data以及判断token失效问题
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance = axios.create({
  baseURL,
  timeout: 2000
})
// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 给每次请求添加token
    const { token } = store.state.user.profile
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  err => Promise.reject(err)
)
// 响应拦截器
// res：{header，config，data，...} 其中data才是后台返回的数据
instance.interceptors.response.use(
  res => {
    return res.data
  },
  // token失效401报错会走下面，其他错误也会走，所以判断
  err => {
    if (err.response && err.response.status === 401) {
      router.push('/login')
    }
    return Promise.reject(err)
  }
)
// 2.封装工具函数
// 2.1，三个参数 url methods submiData（不用考虑提交数据放那个选项里）
// 2.2，函数里面根据methods去把提交的数据放置对应的选项
// 2.3，把axios调用后的promise返回即可
// const request = (url, methods, submiData) => {
//   return instance({
//     url,
//     methods,
//     // 对象中动态key值写法：[key]
//     // toLowerCase:将传过来的请求方式字符串统一转小写
//     [methods.toLowerCase() === 'get' ? 'params' : 'data']: submiData
//   })
// }

export default instance
